// user.controller.js
const jwt = require("jsonwebtoken");
const {
  createUser,
  getOneUserInfo,
  updateDataById,
  getAllUserInfo,
  deleteDataById
} = require("../service/user.service");
const {
  userRegisterError,
  updatePasswordError,
  userQueryError,
} = require("../constant/err.type");
const { JWT_SECRET } = require("../config/config.default");
class UserController {
  // 用户注册模块业务处理
  async register(ctx, next) {
    // 1.获取数据
    const { userName, password, phone, role } = ctx.request.body;
    try {
      // 2.操作数据库
      const res = await createUser(userName, password, phone, role);
      // 3.返回结果
      ctx.body = {
        code: 0,
        message: "用户注册成功！",
        result: {
          id: res.id,
          userName: res.userName,
        },
      };
    } catch (error) {
      console.error("用户注册错误", ctx.request.body);
      ctx.app.emit("error", userRegisterError, ctx);
    }
  }
  // 登录模块业务处理
  async login(ctx, next) {
    const { user_name } = ctx.request.body;
    // 1.获取用户信息
    try {
      // （将除密码的其他信息存入res,写入token的payload）
      const { password, ...res } = await getOneUserInfo({ user_name });
      ctx.body = {
        code: 0,
        message: "用户登录成功！",
        result: {
          token: jwt.sign(res, JWT_SECRET, { expiresIn: "3d" }),
        },
      };
    } catch (error) {
      console.error(error);
    }
  }

   
  
  // 修改密码
  async changePassword(ctx, next) {
    // 1.获取数据
    const id = ctx.state.user.id;
    const password = ctx.request.body.password;
    console.log(id, password);
    // 2.操作数据
    try {
      const res = await updateDataById({ id, password });
      // 3.返回结果
      if (res) {
        ctx.body = {
          code: 0,
          message: "修改密码成功！",
          result: "",
        };
      } else {
        console.error("修改密码失败", ctx.request.body.password);
        ctx.app.emit("error", updatePasswordError, ctx);
      }
    } catch (err) {
      console.error("修改密码失败", err);
    }
  }
  //显示用户信息
  async showUserInfo(ctx, next) {
    try {
      const {
        userName,
        phone,
        role,
        pageNum = 1,
        pageSize = 10,
      } = ctx.request.query;

      const res = await getAllUserInfo(
        userName,
        phone,
        role,
        pageNum,
        pageSize
      );
      if (res) {
        ctx.body = {
          code: 0,
          message: "获取参赛用户列表成功",
          result: res,
        };
      } else {
        ctx.app.emit("error", userQueryError, ctx);
      }
    } catch (err) {
      console.error("获取选手信息失败", err);
    }
  }
  // 通过ID修改用户信息

  async changeUserByID(ctx, next) {
    try {
      // 1.通过query中id修改数据
      const id = ctx.query.id
      // const { id, userName, phone, role } = ctx.request.body;

      const res = await updateDataById({ id, userName, phone, role });
      if (res) {
        ctx.body = {
          code: 0,
          message: "修改用户信息成功",
          result: "",
        };
      }
    } catch (err) {
      console.error("修改用户信息失败", err);
    }
  }
  // 删除用户信息
  async delUserByID(ctx, next) { 
    try {
         const {id}=ctx.params
        const res = await deleteDataById(id);
      if (res) {
        ctx.body = {
          code: 0,
          message: "删除用户信息成功",
          result: "",
        };
      }
    } catch (err) {
      console.error("删除用户信息失败", err);
    }
  }
  logout(ctx, next) {
    // 清除token
    ctx.cookies.set("token", "", {
      maxAge: 0,
    })
    ctx.body = {
      code: 0,
      message: "退出登录成功",
      result: "",
    };
  }
}

module.exports = new UserController();
